-- KEYS[1]: 令牌Key (如: SK_TOKEN_YDZ_COUNT:2024-06-01:G101)
-- KEYS[2]: 计数器Key (如: SK_TOKEN_YDZ_QUERY_COUNTER:2024-06-01:G101)
-- ARGV[1]: 座位类型 ('1' 或 '2')
-- ARGV[2]: 默认计数基数 (5)
local tokenKey = KEYS[1]
local counterKey = KEYS[2]

-- 1. 检查令牌Key是否存在,如果缓存中不存在则访问数据库一次
if redis.call('exists', tokenKey) == 0 then
    return 'NEED_DB_CHECK_ONE'
end

-- 2. 获取当前令牌数量并扣减
local currentToken = tonumber(redis.call('get', tokenKey))
local newTokenCount = currentToken - 1

-- 3. 缓存中没有数据，则返回对应的错误类型
if newTokenCount < 0 then
    -- 令牌不足，返回对应的错误类型，从业务逻辑中进行判断（判断座位类型是1，还是2，返回对应的令牌不足）
    return 'NOT_ENOUGH'
end

-- 4. 当缓存中有数据时，更新令牌数量
redis.call('set', tokenKey, newTokenCount)
redis.call('expire', tokenKey, 400)

-- 5. 处理计数器逻辑，计数器加1
local currentCounter = redis.call('incr', counterKey)
redis.call('expire', counterKey, 200)  -- 设置200秒过期时间
return newTokenCount .. ':' .. currentCounter

--6.在业务逻辑中进行获取令牌的数量，然后进行业务逻辑判断